package com.admin.utils.util;

import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException;
import java.nio.charset.StandardCharsets;
import java.util.HashSet;
import java.util.Set;
import java.util.zip.DataFormatException;
import java.util.zip.Deflater;
import java.util.zip.Inflater;
import org.apache.tomcat.util.codec.binary.Base64;


/**
 * 数据压缩和解压缩
 *
 * @author monxz
 * @Date 2020年12月24日上午11:40:08
 * @Des
 *
 */
public class DataZipUtil {
	/**
	 * 压缩
	 */
	public static String zipString(String unzipString) {

		// 使用指定的压缩级别创建一个新的压缩器。
		Deflater deflater = new Deflater(Deflater.BEST_COMPRESSION);
		// 设置压缩输入数据。
		deflater.setInput(unzipString.getBytes(StandardCharsets.UTF_8));
		// 当被调用时，表示压缩应该以输入缓冲区的当前内容结束。
		deflater.finish();

		final byte[] bytes = new byte[512];
		ByteArrayOutputStream outputStream = new ByteArrayOutputStream(512);

		while (!deflater.finished()) {
			// 压缩输入数据并用压缩数据填充指定的缓冲区。
			int length = deflater.deflate(bytes);
			outputStream.write(bytes, 0, length);
		}
		// 关闭压缩器并丢弃任何未处理的输入。
		deflater.end();
		String zipString = Base64.encodeBase64String(outputStream.toByteArray());

		return zipString.replaceAll("[\r\n]", "");
	}
	
	
	/**
     * 解压缩
     */
    public static String unzipString(String zipString) {
        byte[] decode = Base64.decodeBase64(zipString);
        //创建一个新的解压缩器  https://www.yiibai.com/javazip/javazip_inflater.html

        Inflater inflater = new Inflater();
        //设置解压缩的输入数据。
        inflater.setInput(decode);
        final byte[] bytes = new byte[512];
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream(512);
        try {
            //finished() 如果已到达压缩数据流的末尾，则返回true。
            while (!inflater.finished()) {
                //将字节解压缩到指定的缓冲区中。
                int length = inflater.inflate(bytes);
                outputStream.write(bytes, 0, length);
            }
        } catch (DataFormatException e) {
            e.printStackTrace();
            return null;
        } finally {
            //关闭解压缩器并丢弃任何未处理的输入。
            inflater.end();
        }

        try {
            return outputStream.toString("UTF-8");
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
            return null;
        }
    }
    
    public static void main(String[] args) {
    	
    	Set<String> aus = new HashSet<>();
		aus.add("user");
    	
//		BaseUser  user  = new BaseUser();
//		
//		user.setAuthorities(aus);
//		
//		String s = JSON.toJSONString(user);
//		System.err.println(s);
//		
//		user = JSON.parseObject(s,BaseUser.class);
//		System.err.println(user);
		
		
		
	}

}
